using System;
using System.Collections.Generic;

namespace UltraLight.MVVM.Contracts
{
    /// <summary>
    ///     Interface for view models
    /// </summary>
    public interface IViewModel
    {
        /// <summary>
        ///     To to visual state 
        /// </summary>
        Action<string, bool> GoToVisualState { get; set; }

        /// <summary>
        ///     Back request
        /// </summary>
        /// <returns>Used to process a back request. Return true to cancel.</returns>
        bool CancelBackRequest();

        /// <summary>
        ///     Navigation 
        /// </summary>
        Action GoBack { get; set; }

        /// <summary>
        ///     Dialog 
        /// </summary>
        IDialog Dialog { get; set; }

        /// <summary>
        ///     Navigation request
        /// </summary>
        Action<string> RequestNavigation { get; set; }

        /// <summary>
        ///     Commands to bind to application bar buttons
        /// </summary>
        IEnumerable<IActionCommand<object>> ApplicationButtonBindings { get; }

        /// <summary>
        ///     Commands to bind to application menu items
        /// </summary>
        IEnumerable<IActionCommand<object>> ApplicationMenuBindings { get; }
    }
}